from django.db import models
from django.contrib.auth.hashers import make_password, check_password

class BaseModel(models.Model):
    """
    Base model to add common fields to all models.
    """
    created_at = models.DateTimeField(
        auto_now_add=True,#对象第一次创建时自动设置为当前时间，之后不再更新。
        help_text="创建时间"
    )
    updated_at = models.DateTimeField(
        auto_now=True,#每次保存对象时自动更新为当前时间
        help_text="更新时间"
    )

    class Meta:
        abstract = True#抽象类不会在数据库中生成表，用于共享字段

class User(BaseModel):
    course_count = models.IntegerField(
        help_text="开通课程数量",
        default=0
    )
    phone = models.CharField(null=True,blank=True,max_length=11,verbose_name='手机号')
    _password = models.CharField(null=True,blank=True,max_length=20,verbose_name='真实密码')
    password = models.CharField(null=True,blank=True,max_length=100,verbose_name='密码',db_column=None)#db_column=None表示不使用默认的password字段
    nickname = models.CharField(
        #null=True,#数据库允许为空
        #blank=True,#用于表单验证时该字段可以为空。
        max_length=20,
        help_text="昵称"
    )
    gender = models.IntegerField(
        choices=[(0, "女"), (1, "男")],
        help_text="性别 0:女 1:男"
    )
    job_title = models.CharField(
        max_length=15,
        blank=True,
        null=True,
        help_text="职称"
    )
    introduction = models.TextField(
        blank=True,
        null=True,
        help_text="简介"
    )
    avatar = models.CharField(
        max_length=200,
        blank=True,
        null=True,
        #default="",
        help_text="头像"
    )

    def __str__(self):
        '''
        user = User.objects.filter(phone=phone).first()然后你在控制台打印user，第一个就是<User: 用户昵称>
        '''
        return self.nickname 

    class Meta:
        verbose_name = "用户信息"
        verbose_name_plural = verbose_name

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, value):
       
        self._password = make_password(value)

    def check_password(self, raw_password):
        
        return check_password(raw_password, self._password)#前一个参数是明文密码，后一个参数是加密后的密码
    #到时候直接调用user.password = "123456"即可设置密码,把加密后的数据存到_password中



    
 
        

    
